package com.xjh.basestudy.javabase.io.byteio;

import java.io.*;

public class CopeVidioDemo {
    public static void main(String[] args) throws IOException {
        //记录时间
        long startTime = System.currentTimeMillis();

        //复制视频,可以一个个使用，其他注释
        method1();
        method2();
        method3();
        method4();
        //记录结束时间
        long endTime = System.currentTimeMillis();
        System.out.println("共耗时:" + (endTime - startTime) + "毫秒");
    }

    //方法一：一次复制一个字节
    public static void method1() throws IOException {
        FileInputStream fis = new FileInputStream("D:\\mn.png");
        FileOutputStream fos = new FileOutputStream("javabase\\mn.png");
        //read里不要参数，得到的就是int类型，代表字节个数
        int by;
        while ((by = fis.read()) != -1) {
            fos.write(by);
        }
        fis.close();
        fos.close();
    }

    //方法二：一次复制一个字节数组
    public static void method2() throws IOException {
        FileInputStream fis = new FileInputStream("D:\\mn.png");
        FileOutputStream fos = new FileOutputStream("javabase\\mn.png");
        //read里要参数，得到的就是int类型，代表数组长度,用另外定义的变量len表示
        //然后写字节数组时加上0,len
        byte[] bys = new byte[1024];
        int len;
        while ((len = fis.read(bys)) != -1) {
            fos.write(bys, 0, len);
        }
        fis.close();
        fos.close();
    }

    //方法三：缓冲流一次复制一个字节（就和第一个方法创建的时候不一样）
    public static void method3() throws IOException {
        BufferedInputStream fis = new BufferedInputStream(new FileInputStream("D:\\mn.png"));
        BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream("javabase\\mn.png"));
        //read里不要参数，得到的就是int类型，代表字节个数
        int by;
        while ((by = fis.read()) != -1) {
            fos.write(by);
        }
        fis.close();
        fos.close();
    }

    //方法四：缓冲流一次复制一个字节数组（就和第二个方法创建的时候不一样）
    public static void method4() throws IOException {
        BufferedInputStream fis = new BufferedInputStream(new FileInputStream("D:\\mn.png"));
        BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream("javabase\\mn.png"));
        //read里不要参数，得到的就是int类型，代表字节个数
        int by;
        while ((by = fis.read()) != -1) {
            fos.write(by);
        }
        fis.close();
        fos.close();
    }
}
//用字节数组最快（缓冲流）
